package DAO;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import to.Funcionario;
import to.Usuario;
import util.HibernateUtil;

public class UsuarioDAO {
	public Usuario pesquisarUsuario(Usuario user) throws Exception {
		Funcionario funcionario = null;
		Usuario usuario = null;
		Session session = null;
		try {
			session = HibernateUtil.getSessionFactory().openSession();
			if(user.getUsuario().equalsIgnoreCase("ROOT")){
				Criteria criteria = session.createCriteria(Usuario.class);
				if(!(user.getUsuario().isEmpty() || user.getUsuario() == null)){
					criteria.add(Restrictions.like("usuario",  user.getUsuario()));	
				}
				usuario = (Usuario) criteria.uniqueResult();			
			}else{
				Criteria criteria = session.createCriteria(Funcionario.class, "fun")
						.createAlias("fun.pessoa", "pess")
						.createAlias("pess.usuario", "usu");					
				if(!(user.getUsuario().isEmpty() || user.getUsuario() == null)){
					criteria.add(Restrictions.like("usu.usuario",  user.getUsuario()));	
				}
				funcionario = (Funcionario) criteria.uniqueResult();
				usuario = funcionario.getPessoa().getUsuario();
			}		
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}finally{
			session.close();
		}
		return usuario;
	}
	public Usuario pesquisarUsuarioValidator(String user) throws Exception {
		Funcionario funcionario = null;
		Usuario usuario = null;
		Session session = null;
		try {
			session = HibernateUtil.getSessionFactory().openSession();
			if(user.equalsIgnoreCase("ROOT")){
				Criteria criteria = session.createCriteria(Usuario.class);
				if(!(user.isEmpty() || user == null)){
					criteria.add(Restrictions.like("usuario",  user));	
				}
				usuario = (Usuario) criteria.uniqueResult();			
			}else{
				Criteria criteria = session.createCriteria(Funcionario.class, "fun")
						.createAlias("fun.pessoa", "pess")
						.createAlias("pess.usuario", "usu");					
				if(!(user.isEmpty() || user == null)){
					criteria.add(Restrictions.like("usu.usuario",  user));	
				}
				funcionario = (Funcionario) criteria.uniqueResult();
				usuario = funcionario.getPessoa().getUsuario();
			}		
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}finally{
			session.close();
		}
		return usuario;
	}
}
